

#include "bibliotecas.h"


#ifndef __SERVIDOR_H__
#define __SERVIDOR_H__ 1

/* Tamanho maximo do mensagem a ser esperada */
#define BUFFER_SERVIDOR 1024

/* inicio da string recebida do cliente */
#define STR_I_MENSAGEM "<mensagem>"
#define STR_I_MENSAGEM_LEN 10

/* fim da string recebida do cliente */
#define STR_F_MENSAGEM "</mensagem>"
#define STR_F_MENSAGEM_LEN 11

/* Sinaliza a que a operação solicita e captura de pacotes */
#define STR_CAPTURA "<captura>"
#define STR_CAPTURA_LEN 9

/* Sinaliza para captura de interface de rede */
#define STR_INTERFACE "<interface>"
#define STR_INTERFACE_LEN 11

/* Inicio da string com a regra de captura de pacotes */
#define STR_FILTRO "<filtro>"
#define STR_FILTRO_LEN 8

/* Sinaliza o fim da captura de pacotes */
#define STR_FILTRO_FIM "<fim_captura>"
#define STR_FILTRO_FIM_LEN 13

/* string que contem a quantidade de pacotes a ser capturados */
#define STR_QT_PACOTES "<qtpacotes>"
#define STR_QT_PACOTES_LEN 11

/* Sinaliza que conteudo da mensagem e dados de login */
#define STR_LOGIN "<login>"
#define STR_LOGIN_LEN 7

/* String com usuário do servidor */
#define STR_USER "<user>"
#define STR_USER_LEN 6

/* String com a senha */
#define STR_PASSWORD "<password>"
#define STR_PASSWORD_LEN 10

/* Sinaliza que será enviado as regras criadas no cliente */
#define STR_COMANDO "<comando>"
#define STR_COMANDO_LEN 9

/* Sinaliza para enviar regras ao cliente */
#define STR_UPLOAD "<upload>"
#define STR_UPLOAD_LEN 8

/* Encerra conexão com o cliente */
#define STR_FINAL "<final>"
#define STR_FINAL_LEN 7

/* Sinaliza erro ao cliente */
#define STR_ERRO "<erro>"
#define STR_ERRO_LEN 6

#define STR_INFO "<info>"
#define STR_INFO_LEN 6

/****************************************/
/****************************************/
/****************************************/

/*
 * Função que indica se a mensagem chegou completamente
 * mensagem Mensagem recebida
 * Retorna 1 caso esteja completa caso contrario retorna 0.
 */
int fecha_tag_mensagem(char *mensagem);

/*
 * Função que retira o conteudo da mensagem
 * destino Ponteiro que recebe o conteudo da mensagem
 * origem Ponteiro com a mensagem
 */
void conteudo_mensagem(char *destino, char *origem);

/*
 * Função que obtem o conteudo inserido dentro da tags
 * retorno Contem os conteudo estraido da mensagem
 * str Mensagem passada em formato xml
 * elementos quantidades de conteudo dentro mensagem
 */
void obtem_conteudo_tag(char **retorno, const char *str, int elementos);

/*
 * Função que retorna qual tipo de operação a ser realizada
 * mensagem String com uma operação
 * Retorna 1 para captura uma interface, 2 Captura de pacotes,
 * 3 realizar login, 4 executar um comando no iptables, 5 upload de regras
 * . Caso não corresponda a nenhuma retorna 0.
 */
int operacao(char *mensagem);

/*
 * Função abstrai processo de captura de pacotes
 * str String contendo interfaces de rede e especificação da filtragem (regra).
 * socket Descritor do socket
 */
void realiza_captura(char *str, int socket);

/*
 * Função que abre conexão com o banco de dados
 * file Nome do arquivo .db do banco sqlite3
 * Retorna uma conexão com o banco de dados
 */
sqlite3 *connectDB(const char *file);

/*
 * Função que executa uma query.
 * sql Query a ser executada.
 * db Conexão para o banco de dados.
 * Retorna instancia da execução da operação
 */
sqlite3_stmt *query(const char *sql, sqlite3 *db);

/*
 * Método que executa função de insert no banco de dados
 * e retorna 1 em caso de Sucesso e 0 de erro
 */
int insert_sql(const char *sql, sqlite3 *db);


/*
 * Função que realiza busca de usuário autorizados no servidor.
 * str String com os dados em formato XML com os dados Usuário e Senha
 * Retorna 1 caso usuário exista, 0 não encontre.
 */
int efetua_login(char *str);

/*
 * Função que executa a inserção de regras vinda do cliente
 * e chama gera_script para criar arquivo com as regras
 */
void executa_comando(int socket);

/*
 * Função que cria regras de configuração do firewall e
 * escreve em arquivo para ser executado.
 */
void gera_script(void);

/*
 * Função que envia regras para cliente
 */
void upload_regras(int);

#endif
